home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / games.arc / MAIL.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  7.0 KB  |  313 lines

  1. 10  ' ********************
  2. 20  ' ***     MAIL     ***
  3. 30  ' ********************
  4. 40  '
  5. 50  CLEAR
  6. 60  SCREEN 0,0,0,0
  7. 70  WIDTH 80
  8. 80  KEY OFF
  9. 90  OPEN "MAILDATA" AS #1
  10. 100  FIELD #1,30 AS N$,30 AS A$,20 AS T$,2 AS S$,5 AS Z$,11 AS C$
  11. 110  FIELD #1,99 AS X$
  12. 120  ZERO$ = STRING$(99,0)
  13. 130  BLANK$ = SPACE$(99)
  14. 140  PTR.LAST = PTR.LAST + 1
  15. 150  GET #1,PTR.LAST
  16. 160  IF X$ <> ZERO$ THEN 140
  17. 170  PTR.LAST = PTR.LAST - 1
  18. 180  ON KEY(1) GOSUB 580
  19. 190  ON KEY(2) GOSUB 650
  20. 200  ON KEY(3) GOSUB 710
  21. 210  ON KEY(4) GOSUB 790
  22. 220  ON KEY(5) GOSUB 1100
  23. 230  ON KEY(6) GOSUB 1240
  24. 240  ON KEY(7) GOSUB 1510
  25. 250  ON KEY(8) GOSUB 1970
  26. 260  ON KEY(9) GOSUB 2400
  27. 270  ON KEY(10) GOSUB 2710
  28. 280  GOSUB 3080
  29. 290  '
  30. 300  CLS
  31. 310  LOCATE 1,27
  32. 320  PRINT "* * *   M A I L   * * *
  33. 330  PRINT
  34. 340  PRINT STRING$(80,"=");
  35. 350  LOCATE 11
  36. 360  PRINT STRING$(80,"=");
  37. 370  FOR I = 1 TO 10
  38. 380  READ MENU$
  39. 390  LOCATE 12+I,17
  40. 400  PRINT MENU$
  41. 410  NEXT I
  42. 420  DATA F1.  Get the next address in the file
  43. 430  DATA F2.  Get the previous address in the file
  44. 440  DATA F3.  Enter a new address to the file
  45. 450  DATA F4.  Edit the displayed address
  46. 460  DATA F5.  Delete the displayed address from the file
  47. 470  DATA F6.  Find a file entry
  48. 480  DATA F7.  Sort the file
  49. 490  DATA F8.  Print mailing labels
  50. 500  DATA F9.  List state abbreviations
  51. 510  DATA F10. Quit
  52. 520  GOSUB 580
  53. 530  '
  54. 540  WHILE NOT RAIN OR SNOW
  55. 550  KEY.BUFFER.CLEAR$ = INKEY$
  56. 560  WEND
  57. 570  '
  58. 580  '  Subroutine F1, next address
  59. 590  PTR = PTR - (PTR < PTR.LAST)
  60. 600  IF PTR = 0 THEN PTR = 1 : PTR.LAST = 1
  61. 610  GET #1,PTR
  62. 620  GOSUB 2750
  63. 630  RETURN
  64. 640  '
  65. 650  '  Subroutine F2, previous address
  66. 660  PTR = PTR + (PTR > 1)
  67. 670  GET #1,PTR
  68. 680  GOSUB 2750
  69. 690  RETURN
  70. 700  '
  71. 710  ' Subroutine F3, enter new address
  72. 720  IF X$ = BLANK$ OR X$ = ZERO$ THEN 760
  73. 730  PTR = PTR.LAST  + 1
  74. 740  PTR.LAST = PTR
  75. 750  LSET X$ = BLANK$
  76. 760  GOSUB 790
  77. 770  RETURN
  78. 780  '
  79. 790  ' Subroutine F4, edit displayed address
  80. 800  GOSUB 3020
  81. 810  SCREEN 0,0,1,0
  82. 820  CLS
  83. 830  GOSUB 2750
  84. 840  SCREEN 0,0,1,1
  85. 850  LOCATE 12
  86. 860  IF X$ = BLANK$ OR X$ = ZERO$ THEN 880
  87. 870  PRINT "Just press <enter> if a data item is not to be changed ...
  88. 880  PRINT
  89. 890  INPUT "Name           ... ";NAIM$
  90. 900  INPUT "Street         ... ";ADDRESS$
  91. 910  INPUT "Town           ... ";TOWN$
  92. 920  INPUT "State (2 letters)  ";STATE$
  93. 930  INPUT "Zip code       ... ";ZIP$
  94. 940  INPUT "Comments/codes ... ";CODE$
  95. 950  IF NAIM$ <> "" THEN LSET N$ = NAIM$
  96. 960  IF ADDRESS$ <> "" THEN LSET A$ = ADDRESS$
  97. 970  IF TOWN$ <> "" THEN LSET T$ = TOWN$
  98. 980  IF STATE$ <> "" THEN LSET S$ = STATE$
  99. 990  IF ZIP$ <> "" THEN LSET Z$ = ZIP$
  100. 1000  IF CODE$ <> "" THEN LSET C$ = CODE$
  101. 1010  CAP$ = X$
  102. 1020  GOSUB 2940
  103. 1030  LSET X$ = CAP$
  104. 1040  SCREEN 0,0,0,0
  105. 1050  GOSUB 2750
  106. 1060  PUT #1,PTR
  107. 1070  GOSUB 3080
  108. 1080  RETURN
  109. 1090  '
  110. 1100  ' Subroutine F5, delete displayed address
  111. 1110  GOSUB 3020
  112. 1120  IF PTR.LAST = PTR THEN 1150
  113. 1130  GET #1,PTR.LAST
  114. 1140  PUT #1,PTR
  115. 1150  LSET X$ = ZERO$
  116. 1160  PUT #1,PTR.LAST
  117. 1170  PTR.LAST = PTR.LAST + (PTR.LAST > 1)
  118. 1180  IF PTR > PTR.LAST THEN PTR = PTR.LAST
  119. 1190  GET #1,PTR
  120. 1200  GOSUB 2750
  121. 1210  GOSUB 3080
  122. 1220  RETURN
  123. 1230  '
  124. 1240  ' Subroutine F6, find an address
  125. 1250  GOSUB 3020
  126. 1260  SCREEN 0,0,1,1
  127. 1270  CLS
  128. 1280  LOCATE 7,7
  129. 1290  IF FIND$ = "" THEN 1330
  130. 1300  PRINT "Current search characters are ";CHR$(34);FIND$;CHR$(34);
  131. 1310  PRINT "Just press <enter> to search for next occurence ...";
  132. 1320  PRINT
  133. 1330  PRINT
  134. 1340  LINE INPUT "Enter string of characters to find in file ... ";CAP$
  135. 1350  IF CAP$ = "" THEN 1390
  136. 1360  GOSUB 2950
  137. 1370  FIND$ = CAP$
  138. 1380  IF FIND2$ <> "" THEN FIND$ = FIND2$
  139. 1390  CNT = 1
  140. 1400  PTR = PTR MOD PTR.LAST + 1
  141. 1410  CNT = CNT + 1
  142. 1420  IF CNT > PTR.LAST THEN BEEP : GOTO 1450
  143. 1430  GET #1,PTR
  144. 1440  IF INSTR(X$,FIND$) = 0 THEN 1400
  145. 1450  GET #1,PTR
  146. 1460  SCREEN 0,0,0,0
  147. 1470  GOSUB 2750
  148. 1480  GOSUB 3080
  149. 1490  RETURN
  150. 1500  '
  151. 1510  ' Subroutine F7, sort the file
  152. 1520  GOSUB 3020
  153. 1530  SCREEN 0,0,1,1
  154. 1540  CLS
  155. 1550  PRINT "A.  Name
  156. 1560  PRINT "B.  Street
  157. 1570  PRINT "C.  Town
  158. 1580  PRINT "D.  State
  159. 1590  PRINT "E.  Zip code
  160. 1600  PRINT "F.  Comment/code
  161. 1610  PRINT
  162. 1620  PRINT "Z.  Don't sort ... go back to main menu
  163. 1630  PRINT
  164. 1640  PRINT "Select the field for the sort ...";
  165. 1650  CAP$ = INKEY$
  166. 1660  IF CAP$ = "" THEN 1650
  167. 1670  GOSUB 2940
  168. 1680  IF CAP$ < "A" OR CAP$ > "F" THEN 1900
  169. 1690  LOCATE 12,17
  170. 1700  PRINT "Sorting by field ";CAP$;" ...";
  171. 1710  IF CAP$ = "A" THEN SPTR = 1 : SLEN = 30
  172. 1720  IF CAP$ = "B" THEN SPTR = 31 : SLEN = 30
  173. 1730  IF CAP$ = "C" THEN SPTR = 61 : SLEN = 20
  174. 1740  IF CAP$ = "D" THEN SPTR = 81 : SLEN = 2
  175. 1750  IF CAP$ = "E" THEN SPTR = 83 : SLEN = 5
  176. 1760  IF CAP$ = "F" THEN SPTR = 88 : SLEN = 11
  177. 1770  IZ = 0
  178. 1780  IZ = IZ + 1
  179. 1790  IS = IZ
  180. 1800  IF IS = PTR.LAST THEN 1900
  181. 1810  GET #1,IS
  182. 1820  X2$ = X$
  183. 1830  GET #1,IS + 1
  184. 1840  IF MID$(X2$,SPTR,SLEN) <= MID$(X$,SPTR,SLEN) THEN 1780
  185. 1850  PUT #1,IS
  186. 1860  LSET X$ = X2$
  187. 1870  PUT #1,IS + 1
  188. 1880  IS = IS + (IS > 1)
  189. 1890  GOTO 1810
  190. 1900  SCREEN 0,0,0,0
  191. 1910  PTR = 1
  192. 1920  GET #1,PTR
  193. 1930  GOSUB 2760
  194. 1940  GOSUB 3080
  195. 1950  RETURN
  196. 1960  '
  197. 1970  ' Subroutine F8, print mailing labels
  198. 1980  GOSUB 3020
  199. 1990  SCREEN 0,0,1,1
  200. 2000  CLS
  201. 2010  LOCATE 12,12
  202. 2020  INPUT "How many labels across ";NLA
  203. 2030  IF NLA = 1 THEN 2050
  204. 2040  INPUT "Number of characters across from label to label ";NALL
  205. 2050  INPUT "Number of lines down from label to label ";NDLL
  206. 2060  INPUT "First label number to print (if not no. 1) ";START
  207. 2070  IF START = 0 THEN START = 1
  208. 2080  INPUT "Last label number to print (if not entire file) ";FINISH
  209. 2090  IF FINISH = 0 THEN FINISH = PTR.LAST
  210. 2100  INPUT "Want to change any of these values (y/n) ";CHNG$
  211. 2110  IF CHNG$ = "y" OR CHNG$ = "Y" THEN 2000
  212. 2120  LOCATE 20
  213. 2130  PRINT "Press any key if you want to stop printing labels ...
  214. 2140  STPFLAG = 0
  215. 2150  FOR LABEL = START TO FINISH STEP NLA
  216. 2160  KY$ = INKEY$
  217. 2170  IF KY$ <> "" THEN STPFLAG = 1
  218. 2180  IF STPFLAG THEN 2350
  219. 2190  PN$ = SPACE$(80)
  220. 2200  PA$ = PN$
  221. 2210  PT$ = PN$
  222. 2220  FOR INC = 1 TO NLA
  223. 2230  IF LABEL + INC - 1 > FINISH THEN 2300
  224. 2240  GET #1,LABEL + INC - 1
  225. 2250  TC = (INC - 1) * NALL + 1
  226. 2260  MID$(PN$,TC,30) = N$
  227. 2270  MID$(PA$,TC,30) = A$
  228. 2280  MID$(PT$,TC,20) = T$
  229. 2290  MID$(PT$,TC+INSTR(T$,"  "),8) = S$ + " " + Z$
  230. 2300  NEXT INC
  231. 2310  LPRINT PN$;PA$;PT$;
  232. 2320  FOR CNT = 4 TO NDLL
  233. 2330  LPRINT
  234. 2340  NEXT CNT
  235. 2350  NEXT LABEL
  236. 2360  SCREEN 0,0,0,0
  237. 2370  GOSUB 3080
  238. 2380  RETURN
  239. 2390  '
  240. 2400  ' Subroutine F9, list state abbreviations
  241. 2410  GOSUB 3020
  242. 2420  SCREEN 0,0,2,2
  243. 2430  IF ST.ABBREV$ <> "" THEN 2650
  244. 2440  CLS
  245. 2450  FOR I = 1 TO 51
  246. 2460  LOCATE (I - 1) MOD 17 + 4, INT((I - 1) / 17) * 26 + 7
  247. 2470  READ ST.ABBREV$
  248. 2480  PRINT ST.ABBREV$;
  249. 2490  NEXT I
  250. 2500  DATA AL Alabama,AK Alaska,AZ Arizona,AR Arkansas,CA California
  251. 2510  DATA CO Colorado,CT Connecticut,DE Delaware,DC District of Columbia
  252. 2520  DATA FL Florida,GA Georgia,HI Hawaii,ID Idaho,IL Illinois,IN Indiana
  253. 2530  DATA IA Iowa,KS Kansas,KY Kentucky,LA Louisiana,ME Maine,MD Maryland
  254. 2540  DATA MA Massachusetts,MI Michigan,MN Minnesota,MS Mississippi
  255. 2550  DATA MO Missourri,MT Montana,NE Nebraska,NV Nevada,NH New Hampshire
  256. 2560  DATA NJ New Jersey,NM New Mexico,NY New York,NC North Carolina
  257. 2570  DATA ND North Dakota,OH Ohio,OK Oklahoma,OR Oregon,PA Pennsylvania
  258. 2580  DATA RI Rhode Island,SC South Carolina,SD South Dakota,TN Tennessee
  259. 2590  DATA TX Texas,UT Utah,VT Vermont,VA Virginia,WA Washington
  260. 2600  DATA WV West Virginia,WI Wisconsin,WY Wyoming
  261. 2610  LOCATE 1,25
  262. 2620  PRINT "TWO-LETTER STATE ABBREVIATIONS";
  263. 2630  LOCATE 25,27
  264. 2640  PRINT "Press space bar to continue";
  265. 2650  KY$ = INKEY$
  266. 2660  IF KY$ <> " " THEN 2650
  267. 2670  SCREEN 0,0,0,0
  268. 2680  GOSUB 3080
  269. 2690  RETURN
  270. 2700  '
  271. 2710  ' Subroutine F10, quit
  272. 2720  CLS
  273. 2730  END
  274. 2740  '
  275. 2750  ' Subroutine, put current address on display
  276. 2760  LOCATE 2,1
  277. 2770  PRINT PTR;"     ";
  278. 2780  LOCATE 7,35
  279. 2790  PRINT STRING$(17,32);
  280. 2800  LOCATE 5,22
  281. 2810  PRINT N$;
  282. 2820  LOCATE 6,22
  283. 2830  PRINT A$;
  284. 2840  LOCATE 7,22
  285. 2850  PRINT T$;" ";
  286. 2860  LOCATE ,POS(0) - 1
  287. 2870  IF SCREEN(CSRLIN,POS(0)) = 32 AND POS(0) > 22 THEN 2860
  288. 2880  LOCATE ,POS(0) + 2
  289. 2890  PRINT S$;" ";Z$;
  290. 2900  LOCATE 9,22
  291. 2910  PRINT C$;
  292. 2920  RETURN
  293. 2930  '
  294. 2940  ' Subroutine, capitalize CAP$
  295. 2950  FOR CHAR = 1 TO LEN(CAP$)
  296. 2960  CHAR$ = MID$(CAP$,CHAR,1)
  297. 2970  IF CHAR$ < "a" OR CHAR$ > "z" THEN 2990
  298. 2980  MID$(CAP$,CHAR,1) = CHR$(ASC(CHAR$) - 32)
  299. 2990  NEXT CHAR
  300. 3000  RETURN
  301. 3010  '
  302. 3020  ' Subroutine, deactivate special function keys
  303. 3030  FOR KEYPTR = 1 TO 10
  304. 3040  KEY (KEYPTR) OFF
  305. 3050  NEXT KEYPTR
  306. 3060  RETURN
  307. 3070  '
  308. 3080  ' Subroutine, activate special function keys
  309. 3090  FOR KEYPTR = 1 TO 10
  310. 3100  KEY (KEYPTR) ON
  311. 3110  NEXT KEYPTR
  312. 3120  RETURN
  313.